<html>
<head><meta charset="utf-8"><title>async festivus · wg-async-foundations · Zulip Chat Archive</title></head>
<h2>Stream: <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/index.html">wg-async-foundations</a></h2>
<h3>Topic: <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html">async festivus</a></h3>

<hr>

<base href="https://rust-lang.zulipchat.com">

<head><link href="https://rust-lang.github.io/zulip_archive/style.css" rel="stylesheet"></head>

<a name="243195996"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243195996" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243195996">(Jun 18 2021 at 18:45)</a>:</h4>
<p>OK, I was working more on the harmonic synthesis, but I was feeling a bit frustrated by that, so I started a different try, the <a href="https://hackmd.io/LP_UgLXOQOqHX2MocNk15g?view">Async Festivus for the Rest of Us</a></p>



<a name="243200676"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243200676" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243200676">(Jun 18 2021 at 19:38)</a>:</h4>
<p><span class="user-mention" data-user-id="116883">@tmandry</span> are you around, by any chance?</p>



<a name="243201340"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243201340" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Doc Jones <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243201340">(Jun 18 2021 at 19:46)</a>:</h4>
<p><span class="user-mention silent" data-user-id="116009">nikomatsakis</span> <a href="#narrow/stream/187312-wg-async-foundations/topic/async.20festivus/near/243195996">said</a>:</p>
<blockquote>
<p>OK, I was working more on the harmonic synthesis, but I was feeling a bit frustrated by that, so I started a different try, the <a href="https://hackmd.io/LP_UgLXOQOqHX2MocNk15g?view">Async Festivus for the Rest of Us</a></p>
</blockquote>
<p>I love Async Festivus.  Marked my calendar for  next year's celebration.</p>



<a name="243201733"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243201733" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> tmandry <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243201733">(Jun 18 2021 at 19:51)</a>:</h4>
<p><span class="user-mention" data-user-id="116009">@nikomatsakis</span> somewhat</p>



<a name="243201753"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243201753" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243201753">(Jun 18 2021 at 19:51)</a>:</h4>
<p>OK, I've only got a few minutes till my next call anyway</p>



<a name="243201775"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243201775" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243201775">(Jun 18 2021 at 19:52)</a>:</h4>
<p>I'm just toying with Async Festivus and wanted to chat a bit on what this says / means for async vision doc</p>



<a name="243201817"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243201817" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243201817">(Jun 18 2021 at 19:52)</a>:</h4>
<p>I really want to "wrap this up" for some def'n of "wrapped up"</p>



<a name="243201822"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243201822" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243201822">(Jun 18 2021 at 19:52)</a>:</h4>
<p>I'm trying to figure out the right next step :)</p>



<a name="243202596"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243202596" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Doc Jones <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243202596">(Jun 18 2021 at 20:01)</a>:</h4>
<p>I like this summary of shiny futures from the user's point of view. At what point do these aspirations/goals become a product roadmap?</p>



<a name="243202807"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243202807" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243202807">(Jun 18 2021 at 20:03)</a>:</h4>
<p><span class="user-mention" data-user-id="394977">@Doc Jones</span> so the idea with that hackmd was that it kind of bridges from "aspirational goal" to "the pieces we need" to "design sketches for those pieces"</p>



<a name="243202817"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243202817" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243202817">(Jun 18 2021 at 20:03)</a>:</h4>
<p>it's <em>almost</em> a roadmap</p>



<a name="243202824"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243202824" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243202824">(Jun 18 2021 at 20:03)</a>:</h4>
<p>I guess that it's in a notation that probably only I can understand</p>



<a name="243202840"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243202840" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243202840">(Jun 18 2021 at 20:03)</a>:</h4>
<p>maybe the next step is a skill-tree-- there are also some questions to answer</p>



<a name="243203374"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243203374" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Doc Jones <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243203374">(Jun 18 2021 at 20:09)</a>:</h4>
<p><span class="user-mention silent" data-user-id="116009">nikomatsakis</span> <a href="#narrow/stream/187312-wg-async-foundations/topic/async.20festivus/near/243202817">said</a>:</p>
<blockquote>
<p>it's <em>almost</em> a roadmap</p>
</blockquote>
<p>True.  The only key parts missing for a roadmap are priorities or order of completion and a loose schedule.  Maybe those are next steps from Async Festivus.</p>



<a name="243203627"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243203627" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Doc Jones <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243203627">(Jun 18 2021 at 20:12)</a>:</h4>
<p><span class="user-mention silent" data-user-id="116009">nikomatsakis</span> <a href="#narrow/stream/187312-wg-async-foundations/topic/async.20festivus/near/243201775">said</a>:</p>
<blockquote>
<p>I'm just toying with Async Festivus and wanted to chat a bit on what this says / means for async vision doc</p>
</blockquote>
<p>Are you thinking that this document closes additions to status quo and shiny future stories?</p>



<a name="243204952"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243204952" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> tmandry <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243204952">(Jun 18 2021 at 20:26)</a>:</h4>
<p>I think it's very good, sums up a lot of conversations at a high level while sketching out what actual solutions look like</p>



<a name="243205037"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243205037" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> tmandry <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243205037">(Jun 18 2021 at 20:27)</a>:</h4>
<p>The "key pieces" doesn't include my pet issue, generality over threadedness :)</p>



<a name="243205086"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243205086" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> tmandry <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243205086">(Jun 18 2021 at 20:27)</a>:</h4>
<p>I remember also talking about mod-level generics for that, runtime generality, and testing</p>



<a name="243205174"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243205174" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> tmandry <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243205174">(Jun 18 2021 at 20:28)</a>:</h4>
<p>off the top of my head I can't think of anything else it's missing, though</p>



<a name="243206184"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243206184" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Emmanuel Antony <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243206184">(Jun 18 2021 at 20:39)</a>:</h4>
<p><span class="user-mention silent" data-user-id="116009">nikomatsakis</span> <a href="#narrow/stream/187312-wg-async-foundations/topic/async.20festivus/near/243195996">said</a>:</p>
<blockquote>
<p>OK, I was working more on the harmonic synthesis, but I was feeling a bit frustrated by that, so I started a different try, the <a href="https://hackmd.io/LP_UgLXOQOqHX2MocNk15g?view">Async Festivus for the Rest of Us</a></p>
</blockquote>
<p>I love this. Especially I liked the Promises part. While reading a thought came to my mind regarding better tooling and debugging. An async executor could behave somewhat like a bunch of native threads when compiled in debug mode. Rather than running multiple futures on a single thread, maybe one thread per future? This might improve general tooling and tracking of futures during debug builds. I know executors could also bring such debugging features themselves to track stuff around, but what if that functionality could be generalised across runtimes? So even if you switch runtimes you don't have to switch tooling?</p>



<a name="243206655"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243206655" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Emmanuel Antony <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243206655">(Jun 18 2021 at 20:45)</a>:</h4>
<p>The idea above is vague, but I hope you get the point that I want to convey.</p>



<a name="243210644"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243210644" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Carl Lerche <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243210644">(Jun 18 2021 at 21:37)</a>:</h4>
<p><span class="user-mention" data-user-id="116883">@tmandry</span> what do you mean by "generality over threadedness"?</p>



<a name="243210771"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243210771" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243210771">(Jun 18 2021 at 21:39)</a>:</h4>
<p><span class="user-mention silent" data-user-id="116883">tmandry</span> <a href="#narrow/stream/187312-wg-async-foundations/topic/async.20festivus/near/243205037">said</a>:</p>
<blockquote>
<p>The "key pieces" doesn't include my pet issue, generality over threadedness :)</p>
</blockquote>
<p>ah yes thank you</p>



<a name="243210786"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243210786" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Carl Lerche <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243210786">(Jun 18 2021 at 21:39)</a>:</h4>
<p>My vote is to replace Promise w/ something that isn't tied w/ a future concept (as that is a very overloaded term)</p>



<a name="243210792"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243210792" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243210792">(Jun 18 2021 at 21:40)</a>:</h4>
<p>yes the term is probably bad</p>



<a name="243210830"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243210830" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Carl Lerche <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243210830">(Jun 18 2021 at 21:40)</a>:</h4>
<p>trait AsyncStatement or something if a placeholder</p>



<a name="243210835"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243210835" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243210835">(Jun 18 2021 at 21:40)</a>:</h4>
<p>I just didn't hear a convincing one I like better</p>



<a name="243210844"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243210844" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243210844">(Jun 18 2021 at 21:40)</a>:</h4>
<p>ok AsyncStatement isn't bad :)</p>



<a name="243210851"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243210851" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243210851">(Jun 18 2021 at 21:40)</a>:</h4>
<p>or Runnable</p>



<a name="243210869"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243210869" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243210869">(Jun 18 2021 at 21:40)</a>:</h4>
<p>could it just be <code>Async</code>?</p>



<a name="243210886"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243210886" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Carl Lerche <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243210886">(Jun 18 2021 at 21:41)</a>:</h4>
<p>I'm fine w/ just Async... or even SomeTraitRepresentingACompletionGuaranteedAsyncStatement :P</p>



<a name="243210900"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243210900" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243210900">(Jun 18 2021 at 21:41)</a>:</h4>
<p>I'm going to run with just <code>Async</code> for now</p>



<a name="243210930"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243210930" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Carl Lerche <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243210930">(Jun 18 2021 at 21:41)</a>:</h4>
<p>(mostly, I find Future / Promise terminology confusing when discussing these concepts, especially w/ non-rust people)</p>



<a name="243211115"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243211115" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243211115">(Jun 18 2021 at 21:44)</a>:</h4>
<p>I have definitely heard some confusion there</p>



<a name="243211122"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243211122" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243211122">(Jun 18 2021 at 21:44)</a>:</h4>
<p><span class="user-mention silent" data-user-id="394977">Doc Jones</span> <a href="#narrow/stream/187312-wg-async-foundations/topic/async.20festivus/near/243203374">said</a>:</p>
<blockquote>
<p>True.  The only key parts missing for a roadmap are priorities or order of completion and a loose schedule.  Maybe those are next steps from Async Festivus.</p>
</blockquote>
<p>yes</p>



<a name="243211302"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243211302" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Carl Lerche <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243211302">(Jun 18 2021 at 21:47)</a>:</h4>
<p><span class="user-mention" data-user-id="116009">@nikomatsakis</span> I don't see it in the doc, but "never have to pin!()` should be part of it</p>



<a name="243211378"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243211378" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243211378">(Jun 18 2021 at 21:48)</a>:</h4>
<p><span class="user-mention" data-user-id="224941">@Carl Lerche</span> +1 you are absolutely right</p>



<a name="243211379"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243211379" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243211379">(Jun 18 2021 at 21:48)</a>:</h4>
<p>that's an interesting one</p>



<a name="243211402"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243211402" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243211402">(Jun 18 2021 at 21:48)</a>:</h4>
<p>what about <code>Box::pin</code></p>



<a name="243211405"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243211405" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243211405">(Jun 18 2021 at 21:48)</a>:</h4>
<p>I wonder if we can really achieve that</p>



<a name="243211417"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243211417" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Carl Lerche <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243211417">(Jun 18 2021 at 21:49)</a>:</h4>
<p>when is Box::pin used?</p>



<a name="243211426"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243211426" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Carl Lerche <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243211426">(Jun 18 2021 at 21:49)</a>:</h4>
<p>afaik, the reasons to use pin are Streams (poll_next) and select!</p>



<a name="243211443"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243211443" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243211443">(Jun 18 2021 at 21:49)</a>:</h4>
<p><span class="user-mention silent" data-user-id="224941">Carl Lerche</span> <a href="#narrow/stream/187312-wg-async-foundations/topic/async.20festivus/near/243211417">said</a>:</p>
<blockquote>
<p>when is Box::pin used?</p>
</blockquote>
<p>I don't know :) I would think it's partly used to construct <code>Box&lt;dyn Future&gt;</code></p>



<a name="243211446"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243211446" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Carl Lerche <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243211446">(Jun 18 2021 at 21:49)</a>:</h4>
<p>I believe using <code>async fn next()</code> in an AsyncIterator trait solves the stream problem</p>



<a name="243211452"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243211452" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243211452">(Jun 18 2021 at 21:49)</a>:</h4>
<p>yes, I was thinking that it probably does</p>



<a name="243211453"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243211453" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Carl Lerche <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243211453">(Jun 18 2021 at 21:49)</a>:</h4>
<p>when would one need to box a future?</p>



<a name="243211460"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243211460" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243211460">(Jun 18 2021 at 21:49)</a>:</h4>
<p>recursion comes to mind</p>



<a name="243211498"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243211498" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243211498">(Jun 18 2021 at 21:50)</a>:</h4>
<p>or when your stack traces etc get crazy large--</p>



<a name="243211516"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243211516" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243211516">(Jun 18 2021 at 21:50)</a>:</h4>
<p>side note that this should be in the doc somewhere</p>



<a name="243211521"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243211521" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Carl Lerche <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243211521">(Jun 18 2021 at 21:50)</a>:</h4>
<p>well, hopefully there is a better strategy for recursion...</p>



<a name="243211522"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243211522" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243211522">(Jun 18 2021 at 21:50)</a>:</h4>
<p>I feel like there are "unsolved problems"</p>



<a name="243211524"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243211524" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Alice Ryhl <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243211524">(Jun 18 2021 at 21:50)</a>:</h4>
<p>or when future types aren't named</p>



<a name="243211533"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243211533" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243211533">(Jun 18 2021 at 21:50)</a>:</h4>
<p>that doesn't seem like "inherent complexity" to me</p>



<a name="243211550"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243211550" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Carl Lerche <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243211550">(Jun 18 2021 at 21:50)</a>:</h4>
<p>can recursion be detected at compile time and autoboxed?</p>



<a name="243211551"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243211551" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243211551">(Jun 18 2021 at 21:50)</a>:</h4>
<p>(PErsonally, I would like to see the comiler inserting boxes on your behalf)</p>



<a name="243211553"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243211553" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243211553">(Jun 18 2021 at 21:50)</a>:</h4>
<p>Yes</p>



<a name="243211555"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243211555" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243211555">(Jun 18 2021 at 21:51)</a>:</h4>
<p>I would like to see that happen with an allow-by-default lint</p>



<a name="243211563"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243211563" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243211563">(Jun 18 2021 at 21:51)</a>:</h4>
<p>that warns you when it happens, so people can opt out</p>



<a name="243211570"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243211570" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243211570">(Jun 18 2021 at 21:51)</a>:</h4>
<p>I should add that to the "key pieces" list I guess</p>



<a name="243211591"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243211591" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243211591">(Jun 18 2021 at 21:51)</a>:</h4>
<p><span class="user-mention silent" data-user-id="218683">Alice Ryhl</span> <a href="#narrow/stream/187312-wg-async-foundations/topic/async.20festivus/near/243211524">said</a>:</p>
<blockquote>
<p>or when future types aren't named</p>
</blockquote>
<p>say more, <span class="user-mention" data-user-id="218683">@Alice Ryhl</span></p>



<a name="243211595"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243211595" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243211595">(Jun 18 2021 at 21:51)</a>:</h4>
<p>you mean e.g. in <code>#[async_trait]</code>?</p>



<a name="243211645"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243211645" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Alice Ryhl <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243211645">(Jun 18 2021 at 21:52)</a>:</h4>
<p>that's one example</p>



<a name="243211650"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243211650" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243211650">(Jun 18 2021 at 21:52)</a>:</h4>
<p>that said, I'm not sure how relevant <code>Pin</code> is if we <em>do</em> adopt <code>Async</code>, it doesn't guarantee everything it would need to</p>



<a name="243211654"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243211654" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Alice Ryhl <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243211654">(Jun 18 2021 at 21:52)</a>:</h4>
<p>another is "function pointer that returns a future"</p>



<a name="243211661"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243211661" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243211661">(Jun 18 2021 at 21:52)</a>:</h4>
<p>the main idea is that you give ownership of the <code>Async</code> to some code that fully executes it</p>



<a name="243211672"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243211672" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243211672">(Jun 18 2021 at 21:52)</a>:</h4>
<p>so the pin is encapsulated within those funcctions</p>



<a name="243211701"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243211701" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Carl Lerche <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243211701">(Jun 18 2021 at 21:53)</a>:</h4>
<p>Well, my original premise is the user of async rust would never have to type pin!(foo)</p>



<a name="243211708"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243211708" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243211708">(Jun 18 2021 at 21:53)</a>:</h4>
<p>so in some sense maybe we just have <code>Box&lt;dyn Async&gt;</code>, which is really <em>almost</em> just <code>Box&lt;dyn AsyncFnOnce&gt;</code></p>



<a name="243211712"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243211712" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Carl Lerche <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243211712">(Jun 18 2021 at 21:53)</a>:</h4>
<p>or even Box::pin(...)</p>



<a name="243211715"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243211715" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243211715">(Jun 18 2021 at 21:53)</a>:</h4>
<p>that's what I'm saying</p>



<a name="243211721"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243211721" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243211721">(Jun 18 2021 at 21:53)</a>:</h4>
<p>I'm not convinced they do</p>



<a name="243211722"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243211722" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Carl Lerche <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243211722">(Jun 18 2021 at 21:53)</a>:</h4>
<p><span aria-label="+1" class="emoji emoji-1f44d" role="img" title="+1">:+1:</span></p>



<a name="243211733"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243211733" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243211733">(Jun 18 2021 at 21:53)</a>:</h4>
<p>just by virtue of changing to a model where you can't safely poll</p>



<a name="243211930"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243211930" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Matthias247 <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243211930">(Jun 18 2021 at 21:56)</a>:</h4>
<p><span class="user-mention silent" data-user-id="224941">Carl Lerche</span> <a href="#narrow/stream/187312-wg-async-foundations/topic/async.20festivus/near/243210786">said</a>:</p>
<blockquote>
<p>My vote is to replace Promise w/ something that isn't tied w/ a future concept (as that is a very overloaded term)</p>
</blockquote>
<p>Agreed. There had been some discussions about better names before (in one of the completion threads) - but I can't find it anymore. Obviously I'm totally for <code>SomeTraitRepresentingACompletionGuaranteedAsyncStatement</code> ;)</p>



<a name="243211999"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243211999" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Matthias247 <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243211999">(Jun 18 2021 at 21:57)</a>:</h4>
<blockquote>
<p>(PErsonally, I would like to see the comiler inserting boxes on your behalf)</p>
</blockquote>
<p>Haha - that's what C++ is doing and people don't like :)</p>



<a name="243212124"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243212124" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Matthias247 <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243212124">(Jun 18 2021 at 21:59)</a>:</h4>
<p>I agree on the "no visible Pin" goal however</p>



<a name="243212253"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243212253" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243212253">(Jun 18 2021 at 22:00)</a>:</h4>
<p><span class="user-mention silent" data-user-id="204219">Matthias247</span> <a href="#narrow/stream/187312-wg-async-foundations/topic/async.20festivus/near/243211999">said</a>:</p>
<blockquote>
<p>Haha - that's what C++ is doing and people don't like :)</p>
</blockquote>
<p>People might be wrong. What exactly is C++ doing? I'm not talking about it inserting boxes everywhere, mind you.</p>



<a name="243212286"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243212286" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243212286">(Jun 18 2021 at 22:01)</a>:</h4>
<p>I really want a model that allows for a smooth progression of control from "I don't care if you call malloc once in a while" to "I totally care"</p>



<a name="243212295"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243212295" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243212295">(Jun 18 2021 at 22:01)</a>:</h4>
<p>I can imagine that even within one project both things could be true, depending on the code</p>



<a name="243212357"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243212357" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243212357">(Jun 18 2021 at 22:02)</a>:</h4>
<p>That might be a good goal: "Permits but does not require low-level control"</p>



<a name="243212473"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243212473" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Matthias247 <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243212473">(Jun 18 2021 at 22:03)</a>:</h4>
<p>The C++ model simply makes no guarantees about allocations vs no allocations for coroutines. It will analyze your code, and whenever possible elide allocations. If that is not possible it will insert a hidden allocation for the coroutine state</p>



<a name="243214374"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243214374" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Gus Wynn <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243214374">(Jun 18 2021 at 22:41)</a>:</h4>
<p><span class="user-mention silent" data-user-id="204219">Matthias247</span> <a href="#narrow/stream/187312-wg-async-foundations/topic/async.20festivus/near/243212473">said</a>:</p>
<blockquote>
<p>The C++ model simply makes no guarantees about allocations vs no allocations for coroutines. It will analyze your code, and whenever possible elide allocations. If that is not possible it will insert a hidden allocation for the coroutine state</p>
</blockquote>
<p>are there good docs to read about this? when I wrote my status quo story I found it really hard to get good info about how cpp coroutines actually work (whereas with async rust there are a few relatively well-known writeups)</p>



<a name="243215917"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243215917" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Matthias247 <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243215917">(Jun 18 2021 at 23:14)</a>:</h4>
<p>There's probably a ton of standardization documents as well as talks (e.g. by Gor Nishanov) about it. But for details I would need to search myself</p>



<a name="243220853"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243220853" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Patrick Walton <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243220853">(Jun 19 2021 at 01:25)</a>:</h4>
<p><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0981r0.html">http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0981r0.html</a> and <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1365r0.pdf">http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1365r0.pdf</a></p>



<a name="243220910"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243220910" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Patrick Walton <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243220910">(Jun 19 2021 at 01:26)</a>:</h4>
<p>Separate compilation is the biggest reason why C++ works this way.</p>



<a name="243220914"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243220914" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Patrick Walton <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243220914">(Jun 19 2021 at 01:27)</a>:</h4>
<p>At least, that's my understanding.</p>



<a name="243221184"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243221184" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Patrick Walton <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243221184">(Jun 19 2021 at 01:34)</a>:</h4>
<p><span class="user-mention silent" data-user-id="116009">nikomatsakis</span> <a href="#narrow/stream/187312-wg-async-foundations/topic/async.20festivus/near/243211551">said</a>:</p>
<blockquote>
<p>(PErsonally, I would like to see the comiler inserting boxes on your behalf)</p>
</blockquote>
<p>My personal feeling is that we should proceed cautiously, given that this is one of the most disliked parts of C++ coroutines and I've seen many people say that this is one of the biggest advantages of Rust async over C++. I'm sympathetic to the goal of making async easier to use, though. It strikes me as something we could ship "futures v2.0" without initially, and then evaluate adding it to "futures v2.1" if it's felt to be needed</p>



<a name="243224262"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243224262" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Carl Lerche <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243224262">(Jun 19 2021 at 02:48)</a>:</h4>
<p><span class="user-mention" data-user-id="384014">@Patrick Walton</span> in c++ is the addition of boxes ad-hoc? In the case Niko is talking about, a box would only be inserted to enable recursion. It would also be possible to "opt-out" and just disable async recursion.</p>



<a name="243224267"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243224267" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Carl Lerche <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243224267">(Jun 19 2021 at 02:48)</a>:</h4>
<p><span class="user-mention" data-user-id="384014">@Patrick Walton</span> another question is: "Why is it hated?" in c++?</p>



<a name="243224397"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243224397" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Patrick Walton <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243224397">(Jun 19 2021 at 02:51)</a>:</h4>
<p><span class="user-mention silent" data-user-id="224941">Carl Lerche</span> <a href="#narrow/stream/187312-wg-async-foundations/topic/async.20festivus/near/243224267">said</a>:</p>
<blockquote>
<p><span class="user-mention silent" data-user-id="384014">Patrick Walton</span> another question is: "Why is it hated?" in c++?</p>
</blockquote>
<p>Because C++ programmers, like Rust programmers, like allocation to be explicit</p>



<a name="243224435"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243224435" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Patrick Walton <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243224435">(Jun 19 2021 at 02:52)</a>:</h4>
<p>And in particular, to be able to reliably use coroutines in no-alloc environments</p>



<a name="243224437"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243224437" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Patrick Walton <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243224437">(Jun 19 2021 at 02:52)</a>:</h4>
<p>I'm not sure what you mean by "ad-hoc", but the rules aren't standardized anywhere. They can vary from compiler to compiler.</p>



<a name="243224454"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243224454" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Patrick Walton <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243224454">(Jun 19 2021 at 02:53)</a>:</h4>
<p>I think most committee members want all compilers to converge on the same behavior in practice eventually</p>



<a name="243228707"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243228707" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Matthias247 <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243228707">(Jun 19 2021 at 04:30)</a>:</h4>
<p><span class="user-mention silent" data-user-id="204219">Matthias247</span> <a href="#narrow/stream/187312-wg-async-foundations/topic/async.20festivus/near/243211930">said</a>:</p>
<blockquote>
<p><span class="user-mention silent" data-user-id="224941">Carl Lerche</span> <a href="#narrow/stream/187312-wg-async-foundations/topic/async.20festivus/near/243210786">said</a>:</p>
<blockquote>
<p>My vote is to replace Promise w/ something that isn't tied w/ a future concept (as that is a very overloaded term)</p>
</blockquote>
<p>Agreed. There had been some discussions about better names before (in one of the completion threads) - but I can't find it anymore. Obviously I'm totally for <code>SomeTraitRepresentingACompletionGuaranteedAsyncStatement</code> ;)</p>
</blockquote>
<p>Found things again: <span class="user-mention" data-user-id="238574">@Ryan Leckey</span> proposed <code>suspend fn</code> (as used in Kotlin) and <code>task::Deferred&lt;T&gt;</code> in <a href="#narrow/stream/187312-wg-async-foundations/topic/2021.20roadmap/near/225220451">https://rust-lang.zulipchat.com/#narrow/stream/187312-wg-async-foundations/topic/2021.20roadmap/near/225220451</a></p>
<p>I think <code>suspend</code> is good, but I don't think <code>Deferred</code> is the right term since it not only represents a not-yet running task but also the running version. <code>task::Runnable&lt;T&gt;</code>, <code>task::Storage&lt;T&gt;</code>, <code>task::InProgress&lt;T&gt;</code> or <code>task::Pending&lt;T&gt;</code> (conflicts somewhat with<code>Poll::Pending</code>) , or also the Kotlin/Java variant <code>Continuation&lt;T&gt;</code> seem closer to what the thingy is to me. But I'm also not really attached to any naming as long as it works.</p>



<a name="243229016"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243229016" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Matthias247 <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243229016">(Jun 19 2021 at 04:36)</a>:</h4>
<p><span class="user-mention silent" data-user-id="384014">Patrick Walton</span> <a href="#narrow/stream/187312-wg-async-foundations/topic/async.20festivus/near/243224435">said</a>:</p>
<blockquote>
<p>And in particular, to be able to reliably use coroutines in no-alloc environments</p>
</blockquote>
<p>That one would be my biggest concern. On desktop/server I don't worry a lot about allocations as long as I can understand when they happen, and have some influence to reduce their amount. But on embedded you often have no option except "0 dynamic allocations", except maybe a limit amount at startup. I guess it can be made working if you are allowed to pass a custom allocator, and have some assurance that all allocations are reused if all your stuff gets called in a loop. Probably doable in the zig version where you pass an allocator for couroutine frames.</p>



<a name="243311997"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243311997" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> rpjohnst <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243311997">(Jun 20 2021 at 17:14)</a>:</h4>
<p><span class="user-mention silent" data-user-id="224941">Carl Lerche</span> <a href="#narrow/stream/187312-wg-async-foundations/topic/async.20festivus/near/243211446">said</a>:</p>
<blockquote>
<p>I believe using <code>async fn next()</code> in an AsyncIterator trait solves the stream problem</p>
</blockquote>
<p>this sounds similar to the design for <code>const impl</code> to let <code>const</code> code use traits- and also suggests another reason for getting rid of <code>await</code>: if enough pre-existing traits could be made to work as some kind of <code>async Iterator</code>, <code>async Read</code>, etc. instead of hand-written parallel <code>AsyncIterator</code>, <code>AsyncRead</code>, etc. then code could be generic over <code>async</code> as well as over "threadedness"</p>



<a name="243312239"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243312239" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> rpjohnst <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243312239">(Jun 20 2021 at 17:20)</a>:</h4>
<p>and this could also help with async for loops/etc: <a href="https://gist.github.com/rpjohnst/a68de4c52d9b0b0f6ddf54ca293cceee#streams">https://gist.github.com/rpjohnst/a68de4c52d9b0b0f6ddf54ca293cceee#streams</a></p>



<a name="243378469"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187312-wg-async-foundations/topic/async%20festivus/near/243378469" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Kestrer <a href="https://rust-lang.github.io/zulip_archive/stream/187312-wg-async-foundations/topic/async.20festivus.html#243378469">(Jun 21 2021 at 13:04)</a>:</h4>
<p>To implement that we would need some kind of async opt-out, because some associated functions, like <code>&lt;async BufRead&gt;::consume</code>, should not be async.</p>



<hr><p>Last updated: Aug 07 2021 at 22:04 UTC</p>
</html>